package cn.tedu.sp11.filter;


import cn.tedu.sp01.vo.JsonResult;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;

import javax.servlet.http.HttpServletRequest;

public class AccessFilter extends ZuulFilter {
    /**
     * 过滤器类型: 前置,后置,路由.错误
     * @return
     */
    @Override
    public String filterType() {
        return FilterConstants.PRE_TYPE;
    }
    //过滤器的顺序号
    //返回6,加到第6个位置
    @Override
    public int filterOrder() {
        return 6;
    }
    //针对当前请求进行判断,判断当前请求是否要执行这个过滤器的过滤代码
    //如果访问item-service要检查权限
    //如果访问其他服务则不检查权限,直接访问
    @Override
    public boolean shouldFilter() {
        RequestContext ctx=new RequestContext();
        //获取当前服务id
        String serviceId = (String )ctx.get(FilterConstants.SERVICE_ID_KEY);
        if(serviceId.equals("item-service")){
            return true;
        }
        return false;
    }
    //过滤袋码,对用户权限进行检查
    @Override
    public Object run() throws ZuulException {
       RequestContext ctx=RequestContext.getCurrentContext();
        HttpServletRequest req=ctx.getRequest();
        String token=req.getParameter("token");
        if(token==null){
            //此设置会阻止请求被路由到后台服务器
            ctx.setSendZuulResponse(false);
            //发送提示,提示用户没有登录
            ctx.setResponseStatusCode(200);
            ctx.setResponseBody(JsonResult.err().code(JsonResult.NOT_LOGIN).toString());
        }
        //zuul过滤器返回的数据为以后的扩展使用,
        //目前该返回值没有任何作用
        return null;

    }
}
